home *** CD-ROM | disk | FTP | other *** search
- DECLARE SUB BreakFileName (FileSpec$, DrvPath$, Prefix$, Extension$, ForJoining%)
- DECLARE SUB FindLast (LookIn$, LookFor$, WhereFound%, NumFinds%)
- DECLARE SUB TRIM (TRIM.PARM$)
- DECLARE SUB TrimTrail (TRIM.PARM$, TRIM.THIS$)
- DEFINT A-Z
- DIM BBSList$(200), Headers$(200), DirStartCol(200) ' 022490
- TRUE = -1
- FALSE = 0
- FOR I = 1 TO 200 ' 022490
- DirStartCol(I) = 1 ' 022490
- NEXT ' 022490
- MasterStartCol = 1 ' 022490
- MasterList$ = "UPLOADS.DIR"
- OutFile$ = "NEWFILES.DIR"
- NumNewLists = 0
- ConfigFile$ = "CMPBBS.CFG"
-
- PassedArguments$ = COMMAND$
- PassedArguments$ = UCASE$(PassedArguments$)
- X = INSTR(PassedArguments$, "/B")
- RunBatch = (X > 0)
- IF RunBatch THEN
- PassedArguments$ = LEFT$(PassedArguments$, X - 1) + RIGHT$(PassedArguments$, LEN(PassedArguments$) - X - 1)
- END IF
- X = INSTR(PassedArguments$, "/SHARE")
- SHARING = (X > 0)
- IF SHARING THEN
- PassedArguments$ = LEFT$(PassedArguments$, X - 1) + RIGHT$(PassedArguments$, LEN(PassedArguments$) - X - 1)
- END IF
- IF PassedArguments$ <> "" THEN
- ConfigFile$ = PassedArguments$
- END IF
-
- ON ERROR GOTO 40000
- IF SHARING THEN
- OPEN ConfigFile$ FOR INPUT SHARED AS #1
- ELSE
- OPEN ConfigFile$ FOR INPUT AS #1
- END IF
- ON ERROR GOTO 0
- WHILE NOT EOF(1)
- LINE INPUT #1, A$
- X$ = LEFT$(A$, 1)
- IF X$ <> "" AND X$ <> "*" THEN
- A$ = UCASE$(A$)
- IF LEFT$(A$, 12) = "/MASTERLIST=" THEN
- MasterList$ = MID$(A$, 13)
- CALL TRIM(MasterList$)
- END IF
- IF LEFT$(A$, 9) = "/ADDLIST=" THEN
- NewList$ = MID$(A$, 10)
- CALL TRIM(NewList$)
- NumNewLists = NumNewLists + 1
- BBSList$(NumNewLists) = NewList$
- END IF
- IF LEFT$(A$, 8) = "/HEADER=" THEN
- Headers$(NumNewLists) = MID$(A$, 9)
- CALL TRIM(Headers$(NumNewLists))
- END IF
- IF LEFT$(A$, 9) = "/OUTFILE=" THEN
- OutFile$ = MID$(A$, 10)
- CALL TRIM(OutFile$)
- END IF
- IF LEFT$(A$, 6) = "/SHARE" THEN
- SHARING = TRUE
- END IF
- IF LEFT$(A$, 13) = "/DIRSTARTCOL=" THEN ' 022490
- X$ = MID$(A$, 14) ' 022490
- CALL TRIM(X$) ' 022490
- DirStartCol(NumNewLists) = VAL(X$) ' 022490
- END IF ' 022490
- IF LEFT$(A$, 16) = "/MASTERSTARTPOS=" THEN ' 022490
- X$ = MID$(A$, 15) ' 022490
- CALL TRIM(X$) ' 022490
- MasterStartCol = VAL(X$) ' 022490
- END IF ' 022490
- IF LEFT$(A$, 10) = "/OUTCATAT=" THEN ' 022690
- X$ = MID$(A$, 11) ' 022690
- CALL TRIM(X$) ' 022690
- OutCatAt = VAL(X$) ' 022690
- END IF ' 022690
- END IF
- WEND
- CLOSE 1
-
- PRINT "CMPBBS version 1.0 Feb 26, 1990 copyright (c) 1990 by Ken Goosens"
- PRINT "A SysOp utility to compare BBS file lists"
- PRINT
- PRINT "On this run"
- PRINT "Configuration file used ....... "; ConfigFile$
- PRINT "Name of master list of files... "; MasterList$
- PRINT "File names begin in column....."; MasterStartCol ' 022490
- PRINT "# of file lists to process ...."; NumNewLists
- PRINT "Writing list of new files to... "; OutFile$
- PRINT "Adding category code at column."; ' 022690
- IF OutCatAt > 0 THEN ' 022690
- PRINT OutCatAt ' 022690
- ELSE ' 022690
- PRINT " <none>" ' 022690
- END IF ' 022690
- PRINT
- IF NOT RunBatch THEN
- INPUT "A to abort, anything else runs"; ANS$
- ANS$ = UCASE$(ANS$)
- IF ANS$ = "A" THEN
- END
- END IF
- END IF
-
- ON ERROR GOTO 40010
- FileIn$ = MasterList$
- IF SHARING THEN
- OPEN MasterList$ FOR INPUT SHARED AS #1
- ELSE
- OPEN MasterList$ FOR INPUT AS #1
- END IF
- ON ERROR GOTO 0
-
- GOSUB BuildCRC
-
- OPEN OutFile$ FOR OUTPUT AS #2
-
- AddToNew = TRUE
- NumFilesAdded = 0
- FOR ix = 1 TO NumNewLists
- PRINT "Processing BBS list "; BBSList$(ix);
- ON ERROR GOTO 40100
- FileIn$ = BBSList$(ix)
- StartCol = DirStartCol(ix) ' 022490
- IF SHARING THEN
- OPEN BBSList$(ix) FOR INPUT SHARED AS #1
- ELSE
- OPEN BBSList$(ix) FOR INPUT SHARED AS #1
- END IF
- ON ERROR GOTO 0
- IF ERC > 0 THEN
- ERC = 0
- PRINT " not found - skipping"
- ELSE
- CatCode$ = "" ' 022690
- IF Headers$(ix) <> "" THEN ' 022690
- PRINT #2, " "; Headers$(ix) ' 022690
- IF OutCatAt > 0 THEN ' 022690
- X = INSTR(Headers$(ix), "M! ") ' 022690
- IF X > 0 THEN ' 022690
- X$ = MID$(Headers$(ix), X + 3) ' 022690
- CALL BreakFileName(X$, DrvPath$, CatCode$, Ext$, 0) ' 022690
- CatCode$ = LEFT$(CatCode$, 3) ' 022690
- IF LEN(CatCode$) < 3 THEN ' 022690
- CatCode$ = CatCode$ + SPACE$(3 - LEN(CatCode$)) ' 022690
- END IF ' 022690
- END IF ' 022690
- END IF ' 022690
- END IF ' 022690
- GOSUB ProcessList
- END IF
- NEXT
-
- END
-
- BuildCRC:
-
- WorkName$ = SPACE$(12)
- WorkComp$ = WorkName$ ' 022490
- CRCMaster$ = ""
- FileCRC$ = MKI$(0)
- AddToNew = FALSE
- PRINT
- PRINT "Indexing "; MasterList$;
- StartCol = MasterStartCol ' 022490
- GOSUB ProcessList
-
- RETURN
-
- ProcessList:
-
- AddedAtStart = NumFilesAdded
- NumRead = 0
- AddCat = (CatCode$ <> "")
- CutOffCat = OutCatAt + LEN(CatCode$) - 1
- PrintAt = POS(0) + 1
- ON ERROR GOTO 40020
- WHILE NOT EOF(1)
- 4 LINE INPUT #1, A$
- NumRead = NumRead + 1
- LOCATE , PrintAt
- PRINT NumRead;
- IF LEN(A$) < StartCol THEN ' 022490
- GOTO NotAFile ' 022490
- END IF ' 022490
- IF StartCol > 1 THEN ' 022490
- A$ = MID$(A$, StartCol) ' 022490
- END IF ' 022490
- IF INSTR("/[]|<>+=;, ?*", LEFT$(A$, 1)) > 0 THEN
- GOTO NotAFile
- END IF
- Y = INSTR(A$ + " ", " ")
- IF Y > 13 THEN ' 022690
- GOTO NotAFile ' 022490
- END IF ' 022490
- LSET WorkName$ = A$
- X = LEN(A$)
- IF X < 12 THEN
- MID$(WorkName$, X + 1) = " "
- END IF
- Y = INSTR(WorkName$, " ")
- Z = INSTR(WorkName$, ".") ' 022490
- IF Z = 0 THEN ' 022490
- IF Y = 0 OR Y > 9 THEN ' 022490
- GOTO NotAFile ' 022490
- END IF ' 022490
- END IF ' 022490
- IF Y > 0 THEN
- IF Y < 10 THEN
- MID$(WorkName$, Y) = "." + MID$(WorkName$, 10) + SPACE$(9 - Y)
- END IF
- ELSE ' 022490
- IF Z = 0 OR Z > 9 THEN ' 022490
- GOTO NotAFile ' 022490
- END IF ' 022490
- END IF
- LSET WorkComp$ = WorkName$ ' 022490
- WorkName$ = UCASE$(WorkName$) ' 022490
- IF WorkComp$ <> WorkName$ THEN ' 022490
- GOTO NotAFile ' 022490
- END IF ' 022490
- CALL Xmodem(WorkName$, XmodemChecksum, CRCValue, CRCHigh, CRCLow)
- LSET FileCRC$ = MKI$(CRCValue)
- Z = 1
- SearchAgain:
- HitCRC = INSTR(Z, CRCMaster$, FileCRC$)
- IF HitCRC > 0 THEN
- Y = HitCRC MOD 2
- IF Y = 0 THEN
- Z = HitCRC + 1
- GOTO SearchAgain
- END IF
- END IF
-
- IF HitCRC = 0 THEN
- CRCMaster$ = CRCMaster$ + FileCRC$
- IF AddToNew THEN
- NumFilesAdded = NumFilesAdded + 1
- IF AddCat THEN ' 022690
- X = LEN(A$) ' 022690
- IF X > CutOffCat THEN ' 022690
- A$ = LEFT$(A$, CutOffCat) ' 022690
- ELSE ' 022690
- IF X < CutOffCat THEN ' 022690
- A$ = A$ + SPACE$(CutOffCat - X) ' 022690
- END IF ' 022690
- END IF ' 022690
- MID$(A$, OutCatAt) = CatCode$ ' 022690
- END IF ' 022690
- 5 PRINT #2, A$
- END IF
- END IF
- NotAFile:
- WEND
- ON ERROR GOTO 0
- CLOSE 1
- IF AddToNew THEN
- PRINT " # new"; NumFilesAdded - AddedAtStart
- ELSE
- PRINT
- END IF
-
- RETURN
-
-
- 40000 PRINT "Missing configuration file "; ConfigFile$
- END
- 40010 PRINT "Missing master file list "; MasterList$
- END
- 40020 IF ERL = 4 THEN
- PRINT "Error "; ERR; " while reading "; FileIn$
- ELSE
- PRINT "Error "; ERR; " while writing "; OutFile$
- END IF
- PRINT "Aborting..."
- END
-
-
- 40100 ERC = ERR
- RESUME NEXT
-
- SUB BreakFileName (FileSpec$, DrvPath$, Prefix$, Extension$, ForJoining) STATIC
- FileSpec$ = UCASE$(FileSpec$)
- DrvPath$ = ""
- Prefix$ = ""
- Extension$ = ""
- CALL TrimTrail(FileSpec$, "\")
- WasL = LEN(FileSpec$)
- IF WasL < 1 THEN EXIT SUB
- CALL FindLast(FileSpec$, "\", WasX, WasY)
- IF WasX < 1 THEN IF MID$(FileSpec$, 2, 1) = ":" THEN DrvPath$ = LEFT$(FileSpec$, 1): ZWasS = 3 ELSE ZWasS = 1 ELSE DrvPath$ = LEFT$(FileSpec$, WasX - 1): ZWasS = WasX + 1: IF _
- WasY = 1 THEN DrvPath$ = DrvPath$ + "\"
- WasX = INSTR(FileSpec$ + ".", ".")
- IF WasX < WasL THEN Extension$ = MID$(FileSpec$, WasX + 1)
- IF ZWasS <= WasL THEN IF WasX >= ZWasS THEN Prefix$ = MID$(FileSpec$, ZWasS, WasX - ZWasS)
- IF NOT ForJoining THEN EXIT SUB
- IF LEN(DrvPath$) = 1 THEN IF DrvPath$ <> "\" THEN DrvPath$ = DrvPath$ + ":"
- IF INSTR(DrvPath$, "\") > 0 AND RIGHT$(DrvPath$, 1) <> "\" THEN DrvPath$ = DrvPath$ + "\"
- IF LEN(Extension$) > 0 THEN Extension$ = "." + Extension$
- END SUB
-
- SUB FindLast (LookIn$, LookFor$, WhereFound, NumFinds) STATIC
- WhereFound = INSTR(LookIn$, LookFor$)
- NumFinds = -(WhereFound > 0)
- NextFound = INSTR(WhereFound + 1, LookIn$, LookFor$)
- WHILE NextFound > 0
- NumFinds = NumFinds + 1
- WhereFound = NextFound
- NextFound = INSTR(WhereFound + 1, LookIn$, LookFor$)
- WEND
- END SUB
-
- SUB TRIM (TRIM.PARM$) STATIC
- L = INSTR(TRIM.PARM$, " ")
- IF L < 1 THEN EXIT SUB
- IF L = 1 THEN
- WHILE LEFT$(TRIM.PARM$, 1) = " "
- TRIM.PARM$ = RIGHT$(TRIM.PARM$, LEN(TRIM.PARM$) - 1)
- WEND
- END IF
- CALL TrimTrail(TRIM.PARM$, " ")
- END SUB
-
- SUB TrimTrail (TRIM.PARM$, TRIM.THIS$) STATIC
- IF RIGHT$(TRIM.PARM$, 1) <> TRIM.THIS$ THEN EXIT SUB ' KG081003
- J = LEN(TRIM.PARM$) - 1 ' KG081003
- 108 IF J > 0 THEN
- IF MID$(TRIM.PARM$, J, 1) = TRIM.THIS$ THEN
- J = J - 1
- GOTO 108
- END IF
- END IF
- TRIM.PARM$ = LEFT$(TRIM.PARM$, J) ' KG081003
- END SUB
-
-